package com.gl.buscaminas;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.gl.buscaminas.excepciones.BuscaminasNoEncontradoException;
import com.gl.buscaminas.excepciones.BuscaminasParametroNuloException;
import com.gl.buscaminas.excepciones.MensajesException;

/**
 * 
 * @author Omar Moreno 04/03/2012
 *
 */
public class FabricaBuscaminasJuego {

	private static FabricaBuscaminasJuego instancia;
	private Map<String, BuscaminasJuego> buscaminasJuegos;

	private FabricaBuscaminasJuego() {
		this.buscaminasJuegos = new HashMap<String, BuscaminasJuego>();
	}
	
	/**
	 * @return FabricaBuscaminasJuego 
	 */
	public static FabricaBuscaminasJuego getInstancia() {
		if (instancia == null) {
			instancia = new FabricaBuscaminasJuego();
		}
		return instancia;
	}

	/**
	 * @param id
	 * @return BuscaminasJuego
	 * @throws BuscaminasNoEncontradoException
	 */
	public BuscaminasJuego recuperarJuego(String id) throws BuscaminasNoEncontradoException {
		BuscaminasJuego juego = this.buscaminasJuegos.get(id);
		if (juego == null) {
			throw new BuscaminasNoEncontradoException(new StringBuilder(
					MensajesException.MJE_BUSCAMINAS_NO_ENCONTRADO)
					.append(" id: ").append(id).toString());
		}
		return juego;
	}
	
	/**
	 * @param filas
	 * @param columnas
	 * @return String
	 * @throws BuscaminasParametroNuloException FabricaBuscaminasJuego
	 */
	public String crearJuego(Integer filas, Integer columnas) throws BuscaminasParametroNuloException {
		BuscaminasJuego juego = new BuscaminasJuego();
		juego.crearTablero(filas, columnas);
		String idJuego = UUID.randomUUID().toString();
		this.buscaminasJuegos.put(idJuego, juego);
		return idJuego;
	}
	
	/** 
	 * @return FabricaBuscaminasJuego
	 */
	public List<String> recuperarJuegosClaves(){
		return new ArrayList<String>(this.buscaminasJuegos.keySet());
	}
	

}
